package com.waimai.app.qa.util;

import java.util.Arrays;
import java.util.Random;

import com.waimai.app.qa.data.Item;
import com.waimai.app.qa.webdriver.AppDriver;

/**
 * 
 * 存放公共方法
 *
 */
public class Common extends AppDriver {
	
	/**
	 * 验证下拉列表中的值
	 */
	public static boolean checkValidSelectInSequence(Item element,String[] values) throws Exception{
			// check select options all exist and they are in Sequence
			String[] opts = element.getText().split("\n");			
			if(Arrays.equals(opts,values)){
				return true;
			}else{
				return false;
			}

	}
	
   /**
	*  验证下拉列表中值每个都可以选中
	*/
/*	public static boolean selectEachOne(Item element) throws Exception{
		String[] opts = element.getText().split("\\\n");
		//check select options					
		for(int i=0;i < opts.length;i++)
		{
			element.selectWithoutCheck(opts[i]);
		}
		return true;
	}*/
	
	
	/**字符串拼接处理
	 * @param str
	 * @param path
	 * @return
	 */
	public static String concatStr(String str, String path) {
		int idx1 = path.indexOf("'");
		while (idx1 != -1) {
			if (path.substring(idx1 + 1, idx1 + 2).equals("'")) {
				path = path.substring(0, idx1 + 1) + str
						+ path.substring(idx1 + 1);
			}
			idx1 = path.indexOf("'", idx1 + str.length() + 1);
		}
		return path;
	}
	
	
	/**
	 * 自定义随机字符串(其中可包含汉字，数字,符号,大小写字母)的生成方法.
	 * intLength需要位数 , booWord是否生成汉字，booNumber是否生成数字 ,booSign是否生成符号, booSmallword是否生成小写字母, booBigword是否生成大写字母 
	 * @param intLength
	 * @param booWord
	 * @param booNumber
	 * @param booSign
	 * @param booSmallword
	 * @param booBigword
	 * @return
	 */
	public static String getRandomizer(int intLength, boolean booWord,boolean booNumber, boolean booSign, boolean booSmallword,boolean booBigword) {
		Random ranA = new Random();
		int intResultRound = 0;
		int intA = 0;
		String strB = "";
		while (intResultRound < intLength) {
			// 生成随机数A，表示生成类型
			// 0=汉字，1=数字，2=符号，3=小写字母，4=大写字母
			// 如果随机数A=0，则运行生成汉字
			intA = ranA.nextInt(5);
			if (intA == 0 && booWord) {

				strB = String
						.valueOf((char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))))
						+ strB;
				intResultRound = intResultRound + 1;
				continue;
			}
			// 如果随机数A=1，则运行生成数字
			// 生成随机数A，范围在0-10
			// 把随机数A，转成字符
			// 生成完，位数+1，字符串累加，结束本次循环
			if (intA == 1 && booNumber == true) {
				intA = ranA.nextInt(10);
				strB = String.valueOf(intA) + strB;
				intResultRound = intResultRound + 1;
				continue;
			}
			// 如果随机数A=2，则运行生成符号
			// 生成随机数A，表示生成值域
			// 1：33-47值域，2：58-64值域，3：91-96值域，4：123-126值域
			if (intA == 2 && booSign == true) {
				intA = 1 + ranA.nextInt(4);

				// 如果A=1
				// 生成随机数A，33-47的Ascii码
				// 把随机数A，转成字符
				// 生成完，位数+1，字符串累加，结束本次循环
				if (intA == 1) {
					intA = 33 + ranA.nextInt(15);
					strB = String.valueOf((char) intA) + strB;
					intResultRound = intResultRound + 1;
					continue;
				}

				// 如果A=2
				// 生成随机数A，58-64的Ascii码
				// 把随机数A，转成字符
				// 生成完，位数+1，字符串累加，结束本次循环
				if (intA == 2) {
					intA = 58 + ranA.nextInt(7);
					strB = String.valueOf((char) intA) + strB;
					intResultRound = intResultRound + 1;
					continue;
				}

				// 如果A=3
				// 生成随机数A，91-96的Ascii码
				// 把随机数A，转成字符
				// 生成完，位数+1，字符串累加，结束本次循环
				if (intA == 3) {
					intA = 91 + ranA.nextInt(6);
					strB = String.valueOf((char) intA) + strB;
					intResultRound = intResultRound + 1;
					continue;
				}

				// 如果A=4
				// 生成随机数A，123-126的Ascii码
				// 把随机数A，转成字符
				// 生成完，位数+1，字符串累加，结束本次循环
				if (intA == 4) {
					intA = 123 + ranA.nextInt(4);
					strB = String.valueOf((char) intA) + strB;
					intResultRound = intResultRound + 1;
					continue;
				}
			}
			// 如果随机数A=3，则运行生成小写字母
			// 生成随机数A，范围在97-122
			// 把随机数A，转成字符
			// 生成完，位数+1，字符串累加，结束本次循环
			if (intA == 3 && booSmallword == true) {
				intA = 97 + ranA.nextInt(26);
				strB = String.valueOf((char) intA) + strB;
				intResultRound = intResultRound + 1;
				continue;
			}

			// 如果随机数A=4，则运行生成大写字母
			// 生成随机数A，范围在65-90
			// 把随机数A，转成字符
			// 生成完，位数+1，字符串累加，结束本次循环
			if (intA == 4 && booBigword == true) {
				intA = 65 + ranA.nextInt(26);
				strB = String.valueOf((char) intA) + strB;
				intResultRound = intResultRound + 1;
				continue;
			}
		}
		return strB;
	}
	
	
	/**
	 * @param type 所期望返回的随机数的类型，包括int，nint（负整数），double，ndouble（负double），char，uchar（特殊字符）, china（中文）
	 * @param length 所期望返回的随机数的长度
	 * @return 随机数
	 * @throws Exception
	 */
	public static String getRandomData(String type, int length) {
		String data = "";
		String negativeData = "";
		String charData[] = { "!", "@", "#", "$", "%", "^", "&", "*" };
		if (type.equals("int")) {
			for (int i = 0; i < length - 1; i++) {
				data += (int) (10 * Math.random());
			}
			data = (int) (9 * Math.random() + 1) + data;
		} else if (type.equals("nint")) {
			for (int i = 0; i < length - 1; i++) {
				data += (int) (10 * Math.random());
			}
			data = "-" + (int) (9 * Math.random() + 1) + data;
		} else if (type.equals("double")) {
			for (int i = 0; i < length - 3; i++) {
				data += (int) (10 * Math.random());
			}
			for (int i = 0; i < 2; i++) {
				negativeData += (int) (10 * Math.random());
			}
			data = (int) (9 * Math.random() + 1) + data + "." + negativeData;
		} else if (type.equals("ndouble")) {
			for (int i = 0; i < length - 3; i++) {
				data += (int) (10 * Math.random());
			}
			for (int i = 0; i < 2; i++) {
				negativeData += (int) (10 * Math.random());
			}
			data = "-" + (int) (9 * Math.random() + 1) + data + "."+ negativeData;
		} else if (type.equals("char")) {
			for (int i = 0; i < length; i++) {
				data += String.valueOf((char) ('a' + (int) (Math.random() * 26)));
			}
		} else if (type.equals("uchar")) {
			for (int i = 0; i < length; i++) {
				Random rnd = new Random();
				data += charData[rnd.nextInt(8)];
			}
		}else if (type.equals("china")) {
			for (int i = 0; i < length; i++) {
				data += "中";
			}
		}
		return data;
	}
	
	
}
